TCP/IP 與 Internet 網路:第十三章 網域名稱系統  上一頁           下一頁

 

翻轉工作室:粘添壽

 

13-6 DNS 訊息格式

由上述 DNS 運作程序,我們可以瞭解 DNS 系統中的訊息傳遞不但會出現在客戶端和伺服器之間,在伺服器和伺服器之間傳遞也非常頻繁,因此,DNS 的查詢動作就不像 Telnet FTP 系統那麼簡單。在 Telnet FTP 系統中,我們將客戶端和伺服端都模擬成網路終端機,而以 NVT ASCII 方式來互相通訊,雙方都用直譯程式來編譯傳遞命令。而 DNS 系統雖然也是以終端機模式來通訊,但雙方命令並非由使用者直接下達,而是 Resolver 程式執行查詢動作,因此沒有提供直譯命令的功能。如果需要由直譯命令來測試 DNS 伺服器功能,必須有特殊應用程式,譬如 nslookup 程式。

13-7 (a) DNS 訊息封包格式,它如同一般協定一樣,都是以 IP 封包傳送,並且採用 UDP 傳輸方式,連接在著名埠口 530530/udp)。不論 DNS 客戶端和伺服器之間,或伺服器和伺服器之間都採用此封包格式,它可區分為四大部份,以下分別介紹之。

13-7 DNS 訊息封包格式

13-6-1 訊息標頭

13-7 (b) DNS 訊息標頭格式,由此標頭可以分辨查詢或回覆型態,各欄位功能如下:

識別碼(Identifier, ID): 16 位元識別碼的內容是由客戶端所設定,標示所詢問訊息的號碼,伺服端也按照這識別碼回應所詢問的訊息,客戶端再依照這個號碼比對是否為自己所發出的詢問訊息。

旗標(Flag): 16 位元旗標示用來描述此 DNS 訊息封包的功能,各欄位功能如下:

QRQuestion/Response):本欄位為 0 表示此訊息是查詢;1 為回應訊息封包。

OP-codeOperating Code):表示此封包的工作模式。0 表示標準查詢(正向查詢);1 表示反向查詢;2 為伺服器狀態查詢;3 ~ 15 保留未用。

AAAuthoritative Answer):1 表示所回應的查詢答案(答案區段中的資料)是具有授權的資料。這也表示該資料是由管轄的名稱伺服器得來的。

TCTruncated):TC = 1 表示原來資料長度過長,超過 UDP 封包所能承載(512 Bytes),而被截短了。

RDRecursive Desired):遞迴期待。RD = 1 表示此為『遞迴式查詢』;RD = 0 表示此封包為『反覆式查詢』。此位元大多由查詢封包設定,而回應封包也以相同內容設定。

RARecursive Available):遞迴可獲得。一般都由回應的伺服器設定,RA = 1 表示支援遞迴。

R-codeResponse Code):回應碼。在回應封包裡表示處理查詢的結果,0 表示沒有錯誤發生;1 表示封包格式錯誤(Format Error);2 為伺服器錯誤(Server Error),無法處理這個查詢;3 表示名稱錯誤(Name Error);4 表示不支援此查詢類型(OP-code)(No Implemented);5 為拒絕處理此查詢封包(Refused)。

問題計數(Question Count):表示後面緊接著問題區段的數量,圖 13-7 (c) 表示本查詢問題為一筆。

答案 RR 計數(Answer RR Count):表示後面緊接著答案區段中資源紀錄(Resource Record, RR)的數量,如圖 13-7 (d) 為一筆答案的格式。

權威計數(Authority Count):權威區段的紀錄數量。

增加紀錄計數(Addition Records Count):此欄位為增加權威區段中紀錄的數量。

13-6-2 問題區段

『問題區段』(Question Section是客戶端(或伺服器)向名稱伺服器查詢時,所攜帶 FQDN 名稱所儲存的位置。一般來講,客戶端每次向名稱伺服器查詢一個 FQDN 名稱(Question Count = 1),其問題區段格式如圖 13-7 (c)所示。然而客戶端並非每次都只查詢一筆資料,如需要詢問多筆資料時,則會在問題計數欄位中指明後面緊接著有幾個問題區段。如圖 13-7 (c),問題區段的功能如下:

問題名稱(Question Name):此欄位存放所欲查詢的 FQDN 名稱,每一名稱長度不定,因此,此欄位的長度也不定。網域名稱的存放是以 ASCII 字元表示,最長限制在 64 個字元之內,名稱中的『.』(dot),並不表示出來,而以字元計數取代。譬如,查詢名稱為 www.cu.edu.tw,則填入問題名稱的格式如圖 13-8 所示。

13-8 問題名稱填入方式

13-8 中,每個名稱的最前面欄位表示該名稱的長度,以 0 表示名稱的結束,也表示根網域名稱.

問題型態(Question Type):長度為 16 位元,表示要查詢該名稱的資源紀錄(Resource Record, RR)型態,常用之紀錄型態如下:(各紀錄功能將於 13-7 節說明)

數值

資源紀錄(RR)名稱

功能

1

A

查詢 IP 位址

2

NS

查詢名稱伺服器

5

CNAME

查詢主機別名

12

PTR

反向查詢網域名稱

13

NINFO

查詢主機訊息

15

MX

查詢郵件交換紀錄

問題類別(Question Class):通常都為 1IN),表示 Internet 通訊協定的位址,如果不是 1,則表示其他網路型態(非 IP 位址格式)。

13-6-3 答案區段

『答案區段』(Answer Section裡所存放的是被查詢之名稱伺服器所回應資料,一般查詢都只是一筆資料(Answer RR Count = 1),其格式如圖 13-7 (d) 所示,如有多筆資料回應,則會在答案計數欄位中指明有幾筆資源紀錄(RR)。答案區段中各欄位功能如下

資源名稱(Resource Name):表示回答詢問的資源名稱,也就是要求詢問訊息封包內問題區段之問題名稱欄位的內容。也表示針對哪一個問題名稱作回答,存放格式也如同圖 13-8 所示。

資源型態(Resource Type):資源紀錄(Resource Record, RR)型態,也是如同問題區段中的問題型態一樣。

資源類別(Resource Class):如同問題類別,一般都為 1IN),表示 Internet 網路。

存活時間(Time-To-Live, TTL):長度為 32 位元的正整數,以秒為單位,表示該筆 RR 紀錄可以存活的時間(也就是,可儲存於 Cache 的時間),如超過此時間(一般都是 2 天),則表示該筆資料已失去時效,必須將其刪除。如果 TTL = 0,表示該筆記錄為變動性,而接收端(客戶端或伺服器)不必再儲存於快取伺服器(或快取資料庫)上。

資源資料長度(Resource Data Length):16 位元長度,表示後面資源資料的長度,以位元組計算。

資源資料(Resource Data):不定長度。表示所回應的資源紀錄(RR)的答案,譬如,RR = A(詢問主機位址),則資料資料欄位回應該主機的 IP 位址(163.15.2.30)。

13-6-4 授權區段

DNS 查詢中所得到的並非直接的答案,而是被查詢之伺服器回應可查詢到的其它伺服器資訊(如圖 13-6 中遞迴查詢),此時,便將該資訊儲存於『授權區段』(Authority Section內。授權區段所儲存的格式也如同答案區段一樣,只不過資源資料欄位所存放的是所指明的 DNS 伺服器的網域名稱,而不是它的 IP 位址。另外『增加紀錄區段』(Addition Records Section是當授權區段有存放資料時才會加入,也是六個欄位,但是資源名稱和資源型態兩個欄位並不存放查詢的網域名稱(FQDN),而是存放授權區段中所紀錄的 DNS 伺服器名稱及其 IP 位址。

 

 

<GOTOP>